//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//

/*****************************************************************************/

#ifndef PAIRBEG
#define PAIRBEG(reg)
#endif

#ifndef PAIRDEF
#define PAIRDEF(r1,r2)
#endif

#ifndef PAIRSTK
#define PAIRSTK(r1,r2) PAIRDEF(r1,r2)
#endif

#if defined(_TARGET_X86_)
/*****************************************************************************/
/*                  The following is for x86                                 */
/*****************************************************************************/

//      rlo rhi

PAIRBEG(EAX    )
PAIRDEF(EAX,ECX)
PAIRDEF(EAX,EDX)
PAIRDEF(EAX,EBX)
PAIRDEF(EAX,EBP)
PAIRDEF(EAX,ESI)
PAIRDEF(EAX,EDI)
PAIRSTK(EAX,STK)

PAIRBEG(ECX    )
PAIRDEF(ECX,EAX)
PAIRDEF(ECX,EDX)
PAIRDEF(ECX,EBX)
PAIRDEF(ECX,EBP)
PAIRDEF(ECX,ESI)
PAIRDEF(ECX,EDI)
PAIRSTK(ECX,STK)

PAIRBEG(EDX    )
PAIRDEF(EDX,EAX)
PAIRDEF(EDX,ECX)
PAIRDEF(EDX,EBX)
PAIRDEF(EDX,EBP)
PAIRDEF(EDX,ESI)
PAIRDEF(EDX,EDI)
PAIRSTK(EDX,STK)

PAIRBEG(EBX    )
PAIRDEF(EBX,EAX)
PAIRDEF(EBX,EDX)
PAIRDEF(EBX,ECX)
PAIRDEF(EBX,EBP)
PAIRDEF(EBX,ESI)
PAIRDEF(EBX,EDI)
PAIRSTK(EBX,STK)

PAIRBEG(EBP    )
PAIRDEF(EBP,EAX)
PAIRDEF(EBP,EDX)
PAIRDEF(EBP,ECX)
PAIRDEF(EBP,EBX)
PAIRDEF(EBP,ESI)
PAIRDEF(EBP,EDI)
PAIRSTK(EBP,STK)

PAIRBEG(ESI    )
PAIRDEF(ESI,EAX)
PAIRDEF(ESI,EDX)
PAIRDEF(ESI,ECX)
PAIRDEF(ESI,EBX)
PAIRDEF(ESI,EBP)
PAIRDEF(ESI,EDI)
PAIRSTK(ESI,STK)

PAIRBEG(EDI    )
PAIRDEF(EDI,EAX)
PAIRDEF(EDI,EDX)
PAIRDEF(EDI,ECX)
PAIRDEF(EDI,EBX)
PAIRDEF(EDI,EBP)
PAIRDEF(EDI,ESI)
PAIRSTK(EDI,STK)

PAIRBEG(STK    )
PAIRSTK(STK,EAX)
PAIRSTK(STK,EDX)
PAIRSTK(STK,ECX)
PAIRSTK(STK,EBX)
PAIRSTK(STK,EBP)
PAIRSTK(STK,ESI)
PAIRSTK(STK,EDI)

#endif

/*****************************************************************************/

#ifdef _TARGET_ARM_
/*****************************************************************************/
/*                  The following is for ARM                                 */
/*****************************************************************************/

//      rlo rhi

PAIRBEG(R0   )
PAIRDEF(R0,R1)
PAIRDEF(R0,R2)
PAIRDEF(R0,R3)
PAIRDEF(R0,R4)
PAIRDEF(R0,R5)
PAIRDEF(R0,R6)
PAIRDEF(R0,R7)
PAIRDEF(R0,R8)
PAIRDEF(R0,R9)
PAIRDEF(R0,R10)
PAIRDEF(R0,R11)
PAIRDEF(R0,R12)
PAIRDEF(R0,LR)
PAIRSTK(R0,STK)

PAIRBEG(R1   )
PAIRDEF(R1,R0)
PAIRDEF(R1,R2)
PAIRDEF(R1,R3)
PAIRDEF(R1,R4)
PAIRDEF(R1,R5)
PAIRDEF(R1,R6)
PAIRDEF(R1,R7)
PAIRDEF(R1,R8)
PAIRDEF(R1,R9)
PAIRDEF(R1,R10)
PAIRDEF(R1,R11)
PAIRDEF(R1,R12)
PAIRDEF(R1,LR)
PAIRSTK(R1,STK)

PAIRBEG(R2   )
PAIRDEF(R2,R0)
PAIRDEF(R2,R1)
PAIRDEF(R2,R3)
PAIRDEF(R2,R4)
PAIRDEF(R2,R5)
PAIRDEF(R2,R6)
PAIRDEF(R2,R7)
PAIRDEF(R2,R8)
PAIRDEF(R2,R9)
PAIRDEF(R2,R10)
PAIRDEF(R2,R11)
PAIRDEF(R2,R12)
PAIRDEF(R2,LR)
PAIRSTK(R2,STK)

PAIRBEG(R3   )
PAIRDEF(R3,R0)
PAIRDEF(R3,R1)
PAIRDEF(R3,R2)
PAIRDEF(R3,R4)
PAIRDEF(R3,R5)
PAIRDEF(R3,R6)
PAIRDEF(R3,R7)
PAIRDEF(R3,R8)
PAIRDEF(R3,R9)
PAIRDEF(R3,R10)
PAIRDEF(R3,R11)
PAIRDEF(R3,R12)
PAIRDEF(R3,LR)
PAIRSTK(R3,STK)

PAIRBEG(R4   )
PAIRDEF(R4,R0)
PAIRDEF(R4,R1)
PAIRDEF(R4,R2)
PAIRDEF(R4,R3)
PAIRDEF(R4,R5)
PAIRDEF(R4,R6)
PAIRDEF(R4,R7)
PAIRDEF(R4,R8)
PAIRDEF(R4,R9)
PAIRDEF(R4,R10)
PAIRDEF(R4,R11)
PAIRDEF(R4,R12)
PAIRDEF(R4,LR)
PAIRSTK(R4,STK)

PAIRBEG(R5   )
PAIRDEF(R5,R0)
PAIRDEF(R5,R1)
PAIRDEF(R5,R2)
PAIRDEF(R5,R3)
PAIRDEF(R5,R4)
PAIRDEF(R5,R6)
PAIRDEF(R5,R7)
PAIRDEF(R5,R8)
PAIRDEF(R5,R9)
PAIRDEF(R5,R10)
PAIRDEF(R5,R11)
PAIRDEF(R5,R12)
PAIRDEF(R5,LR)
PAIRSTK(R5,STK)

PAIRBEG(R6   )
PAIRDEF(R6,R0)
PAIRDEF(R6,R1)
PAIRDEF(R6,R2)
PAIRDEF(R6,R3)
PAIRDEF(R6,R4)
PAIRDEF(R6,R5)
PAIRDEF(R6,R7)
PAIRDEF(R6,R8)
PAIRDEF(R6,R9)
PAIRDEF(R6,R10)
PAIRDEF(R6,R11)
PAIRDEF(R6,R12)
PAIRDEF(R6,LR)
PAIRSTK(R6,STK)

PAIRBEG(R7   )
PAIRDEF(R7,R0)
PAIRDEF(R7,R1)
PAIRDEF(R7,R2)
PAIRDEF(R7,R3)
PAIRDEF(R7,R4)
PAIRDEF(R7,R5)
PAIRDEF(R7,R6)
PAIRDEF(R7,R8)
PAIRDEF(R7,R9)
PAIRDEF(R7,R10)
PAIRDEF(R7,R11)
PAIRDEF(R7,R12)
PAIRDEF(R7,LR)
PAIRSTK(R7,STK)

PAIRBEG(R8   )
PAIRDEF(R8,R0)
PAIRDEF(R8,R1)
PAIRDEF(R8,R2)
PAIRDEF(R8,R3)
PAIRDEF(R8,R4)
PAIRDEF(R8,R5)
PAIRDEF(R8,R6)
PAIRDEF(R8,R7)
PAIRDEF(R8,R9)
PAIRDEF(R8,R10)
PAIRDEF(R8,R11)
PAIRDEF(R8,R12)
PAIRDEF(R8,LR)
PAIRSTK(R8,STK)

PAIRBEG(R9   )
PAIRDEF(R9,R0)
PAIRDEF(R9,R1)
PAIRDEF(R9,R2)
PAIRDEF(R9,R3)
PAIRDEF(R9,R4)
PAIRDEF(R9,R5)
PAIRDEF(R9,R6)
PAIRDEF(R9,R7)
PAIRDEF(R9,R8)
PAIRDEF(R9,R10)
PAIRDEF(R9,R11)
PAIRDEF(R9,R12)
PAIRDEF(R9,LR)
PAIRSTK(R9,STK)

PAIRBEG(R10   )
PAIRDEF(R10,R0)
PAIRDEF(R10,R1)
PAIRDEF(R10,R2)
PAIRDEF(R10,R3)
PAIRDEF(R10,R4)
PAIRDEF(R10,R5)
PAIRDEF(R10,R6)
PAIRDEF(R10,R7)
PAIRDEF(R10,R8)
PAIRDEF(R10,R9)
PAIRDEF(R10,R11)
PAIRDEF(R10,R12)
PAIRDEF(R10,LR)
PAIRSTK(R10,STK)

PAIRBEG(R11   )
PAIRDEF(R11,R0)
PAIRDEF(R11,R1)
PAIRDEF(R11,R2)
PAIRDEF(R11,R3)
PAIRDEF(R11,R4)
PAIRDEF(R11,R5)
PAIRDEF(R11,R6)
PAIRDEF(R11,R7)
PAIRDEF(R11,R8)
PAIRDEF(R11,R9)
PAIRDEF(R11,R10)
PAIRDEF(R11,R12)
PAIRDEF(R11,LR)
PAIRSTK(R11,STK)

PAIRBEG(R12   )
PAIRDEF(R12,R0)
PAIRDEF(R12,R1)
PAIRDEF(R12,R2)
PAIRDEF(R12,R3)
PAIRDEF(R12,R4)
PAIRDEF(R12,R5)
PAIRDEF(R12,R6)
PAIRDEF(R12,R7)
PAIRDEF(R12,R8)
PAIRDEF(R12,R9)
PAIRDEF(R12,R10)
PAIRDEF(R12,R11)
PAIRDEF(R12,LR)
PAIRSTK(R12,STK)

PAIRBEG(LR    )
PAIRDEF(LR ,R0)
PAIRDEF(LR ,R1)
PAIRDEF(LR ,R2)
PAIRDEF(LR ,R3)
PAIRDEF(LR ,R4)
PAIRDEF(LR ,R5)
PAIRDEF(LR ,R6)
PAIRDEF(LR ,R7)
PAIRDEF(LR ,R8)
PAIRDEF(LR ,R9)
PAIRDEF(LR ,R10)
PAIRDEF(LR ,R11)
PAIRDEF(LR ,R12)
PAIRSTK(LR ,STK)

PAIRBEG(STK   )
PAIRSTK(STK,R0)
PAIRSTK(STK,R1)
PAIRSTK(STK,R2)
PAIRSTK(STK,R3)
PAIRSTK(STK,R4)
PAIRSTK(STK,R5)
PAIRSTK(STK,R6)
PAIRSTK(STK,R7)
PAIRSTK(STK,R8)
PAIRSTK(STK,R9)
PAIRSTK(STK,R10)
PAIRSTK(STK,R11)
PAIRSTK(STK,R12)
PAIRSTK(STK,LR)

#endif

/*****************************************************************************/

#undef PAIRBEG
#undef PAIRDEF
#undef PAIRSTK

/*****************************************************************************/
